package org.lpw.wormhole;

import org.lpw.wormhole.cache.CacheFactory;
import org.lpw.wormhole.queue.QueueFactory;
import org.lpw.wormhole.util.Kit;

/**
 * Wormhole管理器，用于管理Wormhole对象。
 * 
 * @author lpw
 */
public class WormholeManager
{
    private static WormholeManager instance;

    protected WormholeContext wormholeContext;
    protected CacheFactory cacheFactory;
    protected QueueFactory queueFactory;
    protected Kit kit;

    /**
     * 构造缓存管理器。
     */
    private WormholeManager()
    {
        super();
    }

    /**
     * 获取缓存环境。
     * 
     * @return 缓存环境。
     */
    public WormholeContext getWormholeContext()
    {
        return wormholeContext;
    }

    /**
     * 设置缓存环境。
     * 
     * @param wormholeContext
     *            缓存环境。
     */
    public void setWormholeContext(WormholeContext wormholeContext)
    {
        this.wormholeContext = wormholeContext;
    }

    /**
     * 获取缓存工厂。
     * 
     * @return 缓存工厂。
     */
    public CacheFactory getCacheFactory()
    {
        return cacheFactory;
    }

    /**
     * 设置缓存工厂。
     * 
     * @param cacheFactory
     *            缓存工厂。
     */
    public void setCacheFactory(CacheFactory cacheFactory)
    {
        this.cacheFactory = cacheFactory;
    }

    /**
     * 获取队列工厂。
     * 
     * @return 队列工厂。
     */
    public QueueFactory getQueueFactory()
    {
        return queueFactory;
    }

    /**
     * 设置队列工厂。
     * 
     * @param queueFactory
     *            队列工厂。
     */
    public void setQueueFactory(QueueFactory queueFactory)
    {
        this.queueFactory = queueFactory;
    }

    /**
     * 获取工具箱。
     * 
     * @return 工具箱。
     */
    public Kit getKit()
    {
        return kit;
    }

    /**
     * 设置工具箱。
     * 
     * @param kit
     *            工具箱。
     */
    public void setKit(Kit kit)
    {
        this.kit = kit;
    }

    /**
     * 获取缓存管理器实例。
     * 
     * @return 缓存管理器实例。
     */
    public static WormholeManager getInstance()
    {
        if(instance==null)
        {
            synchronized(WormholeManager.class)
            {
                if(instance==null)
                    instance = new WormholeManager();
            }
        }

        return instance;
    }
}
